package com.sample.ab.service

public class GroovyTest1 {

    public String testQuery(long id) {
        return "查询成功, id=" + id;
    }

    public static void main(String[] args) {
        fun2();
    }

    /**
     * groovy可以通过import的方式直接调用java类
     */
    private static void fun1() {
        //创建脚本对象
        GroovyShell groovyShell = new GroovyShell();
        //脚本内容，内容中倒入了java类
        String scriptContent = "import com.sample.ab.service.GroovyTest1\n" +
                "def res = new GroovyTest1().testQuery(1L);\n" +
                "res";
        //执行脚本
        Script script = groovyShell.parse(scriptContent);
        System.out.println(script.run());
    }

    /**
     *groovy支持通过GroovyShell预设对象，在groovy动态脚本中直接调用预设对象的方法
     */
    public static void fun2() {
        //1.预设对象，就是将java对象作为变量绑定到groovy中
        Binding groovyBinding = new Binding();
        groovyBinding.setVariable("groovyTest", new GroovyTest1());
        //也可以用setProperty
        groovyBinding.setProperty("num", 100L);
        //2.创建脚本对象
        GroovyShell groovyShell = new GroovyShell(groovyBinding);
        //3.脚本内容
        String scriptContent = "def res = groovyTest.testQuery(num);\n" +
                "res";
        //4.执行脚本，得到返回值
        Object evaluate = groovyShell.evaluate(scriptContent);
        System.out.println(evaluate);
    }
}